import { getSecond, uuid } from '../../utils/common'
import { _sendVerificationCode , _checkVerificationCode } from '../../utils/sendCode'
import { ManageAdmin , Account , WorkChain , WorkNormal} from '../../models/'
import { CODE , SEND_TIME , TOKEN_TIME , VERIFICATION_CODE_TYPE , UID_KEY , _getCountLimit , PROGRESS_STATUS} from '../../config/config'
import { _getAccount , _bindPhone } from '../../utils/account' 

/**
 * @api {post} /manage_work/chainList 获取区块链作品列表
 * @apiPermission 管理员
 * @apiVersion 1.0.0 
 * @apiName chainList
 * @apiGroup z_manage_work
 * @apiExample 请求示例:
 * curl -H "Content-Type: application/json" -X POST -d '{}' 'http://copyright.hotchain.vip/api/manage_work/chainList'

 * @apiParam {String}  token                   管理员token
 * @apiParam {Integer}  page                   页码 1开始
 * @apiParam {Integer}  limit                  每页显示条数 默认50
 * @apiParam {Integer}  uid                    创建作品用户id
 * @apiParam {Integer}  type                   作品性质
 * @apiParam {Integer}  gategory               作品类型
 * @apiParam {Integer}  release_flag           作品是否发布
 *
 *
 * @apiSuccess {Integer}  count                总条数
 * @apiSuccess {Array}    lit                  区块链作品集合
 * @apiSuccess {Object}   work                 区块链作品
 * 
 * @apiSuccess {String}   id              作品id
 * @apiSuccess {String}   uid             创建作品用户id 
 * @apiSuccess {String}   name            作品名称
 * @apiSuccess {String}   type            作品创作性质
 * @apiSuccess {String}   gategory        作品类型
 * @apiSuccess {String}   complete_time   作品完成时间
 * @apiSuccess {String}   complete_place  作品完成动点             
 * @apiSuccess {String}   release_flag    作品是否发布 1发布 2未发布           
 * @apiSuccess {String}   release_time    作品发布时间 如果未发布传0或者不传     
 * @apiSuccess {String}   url             作品下载url地址
 * @apiSuccess {String}   describe        作品描述
 * @apiSuccess {String}   contact_id      作品关联作者信息id
 * @apiSuccess {String}   hash_code       作品唯一hash码/md5码
 * @apiSuccess {String}   handle_code     处理码
 * @apiSuccess {String}   status          作品状态
 * @apiSuccess {String}   remark          备注
 * @apiSuccess {String}   ext             拓展字段
 * @apiSuccess {String}   ctime           创建时间
 * @apiSuccess {String}   htime           处理时间
 * 
 * @apiSampleRequest http://copyright.hotchain.vip/api/manage_work/chainList
 * @apiSuccessExample {json} 成功返回
 *     HTTP/1.1 200 OK
 *     {
    "code": 0
  }
 *
 * @apiUse ERROR
 */
export async function chainList(ctx) {
    let page  	           = ctx.request.body.page
	const uid              = ctx.request.body.uid
	const type             = ctx.request.body.type
	const gategory         = ctx.request.body.gategory
	const release_flag     = ctx.request.body.release_flag
	if(!page) {
		page               = 0
	}
	page                   = Number(page) - 1
	const countLimit       = _getCountLimit(ctx.request.body.limit)
	const where            = {status : 1}
	if(uid) {
		where.uid          = uid
	}
	if(type) {
		where.type         = type
	}
	if(gategory) {
		where.gategory     = gategory
	}
	if(release_flag) {
		where.release_flag = release_flag
	}
	const order			   = [['ctime', 'DESC']]
	const limit			   = [page * countLimit,countLimit]
	const query            = {where,order,limit}

	const workChains       = await WorkChain.findAll(query)
	const count            = await WorkChain.count({where})

	ctx.body               = CODE.success({
		lit:workChains,count
	})
}


/**
 * @api {post} /manage_work/normalList 获取普通作品列表
 * @apiPermission 管理员
 * @apiVersion 1.0.0 
 * @apiName normalList
 * @apiGroup z_manage_work
 * @apiExample 请求示例:
 * curl -H "Content-Type: application/json" -X POST -d '{}' 'http://copyright.hotchain.vip/api/manage_work/normalList'

 * @apiParam {String}  token                   管理员token
 * @apiParam {Integer}  page                   页码 1开始
 * @apiParam {Integer}  limit                  每页显示条数 默认50
 * @apiParam {Integer}  uid                    创建作品用户id
 * @apiParam {Integer}  type                   作品性质
 * @apiParam {Integer}  gategory               作品类型
 * @apiParam {Integer}  release_flag           作品是否发布
 * @apiParam {Integer}  ststus                 作品审核状态
 *
 *
 * @apiSuccess {Integer}  count                总条数
 * @apiSuccess {Array}    lit                  区块链作品集合
 * @apiSuccess {Object}   work                 区块链作品
 * 
 * @apiSuccess {String}   id              作品id
 * @apiSuccess {String}   uid             创建作品用户id 
 * @apiSuccess {String}   name            作品名称
 * @apiSuccess {String}   type            作品创作性质
 * @apiSuccess {String}   gategory        作品类型
 * @apiSuccess {String}   complete_time   作品完成时间
 * @apiSuccess {String}   complete_place  作品完成动点             
 * @apiSuccess {String}   release_flag    作品是否发布 1发布 2未发布           
 * @apiSuccess {String}   release_time    作品发布时间 如果未发布传0或者不传     
 * @apiSuccess {String}   url             作品下载url地址
 * @apiSuccess {String}   describe        作品描述
 * @apiSuccess {String}   contact_id      作品关联作者信息id
 * @apiSuccess {String}   hash_code       作品唯一hash码/md5码
 * @apiSuccess {String}   handle_code     处理码
 * @apiSuccess {String}   status          作品状态
 * @apiSuccess {String}   remark          备注
 * @apiSuccess {String}   ext             拓展字段
 * @apiSuccess {String}   ctime           创建时间
 * @apiSuccess {String}   htime           处理时间
 * 
 * @apiSampleRequest http://copyright.hotchain.vip/api/manage_work/normalList
 * @apiSuccessExample {json} 成功返回
 *     HTTP/1.1 200 OK
 *     {
    "code": 0
  }
 *
 * @apiUse ERROR
 */
export async function normalList(ctx) {
    let page  	           = ctx.request.body.page
	const uid              = ctx.request.body.uid
	const type             = ctx.request.body.type
	const gategory         = ctx.request.body.gategory
	const release_flag     = ctx.request.body.release_flag
	const status           = ctx.request.body.status

	if(!page) {
		page               = 0
	}
	page                   = Number(page) - 1
	const countLimit       = _getCountLimit(ctx.request.body.limit)
	const where            = {}
	if(uid) {
		where.uid          = uid
	}
	if(type) {
		where.type         = type
	}
	if(gategory) {
		where.gategory     = gategory
	}
	if(release_flag) {
		where.release_flag = release_flag
	}
	if(status) {
		where.status       = status
	} else {
		where.status       = { $not:PROGRESS_STATUS.DELETE }
	}
	const order			   = [['ctime', 'DESC']]
	const limit			   = [page * countLimit,countLimit]
	const query            = {where,order,limit}

	const workNormals       = await WorkNormal.findAll(query)
	const count            = await WorkNormal.count({where})

	ctx.body               = CODE.success({
		lit:workNormals,count
	})
}

/**
 * @api {post} /manage_work/completeChain 通过普通作品审核
 * @apiPermission 管理员
 * @apiVersion 1.0.0 
 * @apiName completeChain
 * @apiGroup z_manage_work
 * @apiExample 请求示例:
 * curl -H "Content-Type: application/json" -X POST -d '{}' 'http://copyright.hotchain.vip/api/manage_work/completeChain'

 * @apiParam {String}  token                   管理员token
 * @apiParam {String}  hash_code               处理码
 *
 *
 * @apiSuccess {Object}   work                 区块链作品
 * @apiSuccess {String}   id              作品id
 * @apiSuccess {String}   uid             创建作品用户id 
 * @apiSuccess {String}   name            作品名称
 * @apiSuccess {String}   type            作品创作性质
 * @apiSuccess {String}   gategory        作品类型
 * @apiSuccess {String}   complete_time   作品完成时间
 * @apiSuccess {String}   complete_place  作品完成动点             
 * @apiSuccess {String}   release_flag    作品是否发布 1发布 2未发布           
 * @apiSuccess {String}   release_time    作品发布时间 如果未发布传0或者不传     
 * @apiSuccess {String}   url             作品下载url地址
 * @apiSuccess {String}   describe        作品描述
 * @apiSuccess {String}   contact_id      作品关联作者信息id
 * @apiSuccess {String}   hash_code       作品唯一hash码/md5码
 * @apiSuccess {String}   handle_code     处理码
 * @apiSuccess {String}   status          作品状态
 * @apiSuccess {String}   remark          备注
 * @apiSuccess {String}   ext             拓展字段
 * @apiSuccess {String}   ctime           创建时间
 * @apiSuccess {String}   htime           处理时间
 * 
 * @apiSampleRequest http://copyright.hotchain.vip/api/manage_work/completeChain
 * @apiSuccessExample {json} 成功返回
 *     HTTP/1.1 200 OK
 *     {
    "code": 0
  }
 *
 * @apiUse ERROR
 */
export async function completeNormal(ctx) {

	const hash_code			 = ctx.request.body.hash_code
	const normalWork         = await WorkNormal.findOne({where:{hash_code}})
	if(normalWork) {
		normalWork.status    = PROGRESS_STATUS.COMPLETE
		normalWork.htime     = getSecond()
		normalWork.hash_code = uuid()
		await chainWork.save()
		ctx.body            = CODE.success({work:normalWork})
		return
	}
	ctx.body                = CODE.MANAGE_ERROR.ERROR_HASH_CODE
}

/**
 * @api {post} /manage_work/failNormal 不通过普通作品审核
 * @apiPermission 管理员
 * @apiVersion 1.0.0 
 * @apiName failNormal
 * @apiGroup z_manage_work
 * @apiExample 请求示例:
 * curl -H "Content-Type: application/json" -X POST -d '{}' 'http://copyright.hotchain.vip/api/manage_work/failNormal'

 * @apiParam {String}  token                   管理员token
 * @apiParam {String}  hash_code               处理码
 *
 *
 * @apiSuccess {Object}   work                 区块链作品
 * @apiSuccess {String}   id              作品id
 * @apiSuccess {String}   uid             创建作品用户id 
 * @apiSuccess {String}   name            作品名称
 * @apiSuccess {String}   type            作品创作性质
 * @apiSuccess {String}   gategory        作品类型
 * @apiSuccess {String}   complete_time   作品完成时间
 * @apiSuccess {String}   complete_place  作品完成动点             
 * @apiSuccess {String}   release_flag    作品是否发布 1发布 2未发布           
 * @apiSuccess {String}   release_time    作品发布时间 如果未发布传0或者不传     
 * @apiSuccess {String}   url             作品下载url地址
 * @apiSuccess {String}   describe        作品描述
 * @apiSuccess {String}   contact_id      作品关联作者信息id
 * @apiSuccess {String}   hash_code       作品唯一hash码/md5码
 * @apiSuccess {String}   handle_code     处理码
 * @apiSuccess {String}   status          作品状态
 * @apiSuccess {String}   remark          备注
 * @apiSuccess {String}   ext             拓展字段
 * @apiSuccess {String}   ctime           创建时间
 * @apiSuccess {String}   htime           处理时间
 * 
 * @apiSampleRequest http://copyright.hotchain.vip/api/manage_work/failNormal
 * @apiSuccessExample {json} 成功返回
 *     HTTP/1.1 200 OK
 *     {
    "code": 0
  }
 *
 * @apiUse ERROR
 */
export async function failNormal(ctx) {

	const hash_code			 = ctx.request.body.hash_code
	const normalWork         = await WorkNormal.findOne({where:{hash_code}})
	if(normalWork) {
		normalWork.status    = PROGRESS_STATUS.FAIL
		normalWork.htime     = getSecond()
		normalWork.hash_code = uuid()
		await normalWork.save()
		ctx.body             = CODE.success({work:normalWork})
		return
	}
	ctx.body                 = CODE.MANAGE_ERROR.ERROR_HASH_CODE
}


export async function checkToken(ctx,next) {
	const token  = ctx.request.body.token
	const admin  = await ManageAdmin.findOne({where:{uid:token,status:1}})
	if(admin) {
		ctx.body = { admin }
		if(next) {
			return next()
		}
	}
	ctx.body     = CODE.MANAGE_ERROR.ERROR_ADMIN_NOT_FOUND
}
/**
 * @apiDefine ERROR
 * @apiErrorExample {json} 错误返回:
 *     {
 *       "code": "错误码",
 *       "error": "错误描述",
 *       "msg":"错误信息"
 *     }
 */